//
// Copyright (C) [2020] Futurewei Technologies, Inc.
//
// FORCE-RISCV is licensed under the Apache License, Version 2.0 (the "License");
//  you may not use this file except in compliance with the License.
//  You may obtain a copy of the License at
//
//  http://www.apache.org/licenses/LICENSE-2.0
//
// THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR
// FIT FOR A PARTICULAR PURPOSE.
// See the License for the specific language governing permissions and
// limitations under the License.
//

/*  !!! NOTICE !!!
    This file is automatically generated by the script: utils/enum_classes/create_enum_files.py
    Please do not modify this file manually.  Instead, modify the above mentioned script to re-generate this file.
*/

#ifndef Force_Enums_H
#define Force_Enums_H

#include <string>

namespace Force {


  /*!
    Various limitation values
  */
  enum class ELimitType : unsigned char {
    ThreadsLimit = 0,
    CoresLimit = 1,
    ChipsLimit = 2,
    PhysicalAddressLimit = 3,
    MaxInstructions = 4,
    PerMonRegisterNumber = 5,
    DependencyHistoryLimit = 6,
    BranchNotTakenLimit = 7,
    SpeculativeBntLevelLimit = 8,
    MaxPhysicalVectorLen = 9,
    ErrRegisterNumber = 10,
    SpeculativeBntInstructionLimit = 11,
    MaxVectorElementWidth = 12,
  };
  extern unsigned char ELimitTypeSize;
  extern const std::string ELimitType_to_string(ELimitType in_enum); //!< Get string name for enum.
  extern ELimitType string_to_ELimitType(const std::string& in_str); //!< Get enum value for string name.
  extern ELimitType try_string_to_ELimitType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char ELimitTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Operand types in the instruction files
  */
  enum class EOperandType : unsigned char {
    Constant = 0,
    Immediate = 1,
    Choices = 2,
    Register = 3,
    GPR = 4,
    GPRSP = 5,
    FPR = 6,
    SIMDSR = 7,
    SIMDVR = 8,
    SysReg = 9,
    Branch = 10,
    LoadStore = 11,
    AuthBranch = 12,
    AuthLoadStore = 13,
    SystemOp = 14,
    VECREG = 15,
    PREDREG = 16,
    ALU = 17,
    DataProcessing = 18,
    VectorLayout = 19,
  };
  extern unsigned char EOperandTypeSize;
  extern const std::string EOperandType_to_string(EOperandType in_enum); //!< Get string name for enum.
  extern EOperandType string_to_EOperandType(const std::string& in_str); //!< Get enum value for string name.
  extern EOperandType try_string_to_EOperandType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EOperandTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Memory data types in memory model
  */
  enum class EMemDataType : unsigned char {
    Init = 1,
    Instruction = 2,
    Data = 4,
    Both = 6,
  };
  extern unsigned char EMemDataTypeSize;
  extern const std::string EMemDataType_to_string(EMemDataType in_enum); //!< Get string name for enum.
  extern EMemDataType string_to_EMemDataType(const std::string& in_str); //!< Get enum value for string name.
  extern EMemDataType try_string_to_EMemDataType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EMemDataTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Register attribute types in register file
  */
  enum class ERegAttrType : unsigned char {
    Read = 1,
    Write = 2,
    ReadWrite = 3,
    HasValue = 4,
    Unpredictable = 8,
    UpdatedFromISS = 16,
  };
  extern unsigned char ERegAttrTypeSize;
  extern const std::string ERegAttrType_to_string(ERegAttrType in_enum); //!< Get string name for enum.
  extern ERegAttrType string_to_ERegAttrType(const std::string& in_str); //!< Get enum value for string name.
  extern ERegAttrType try_string_to_ERegAttrType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char ERegAttrTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Memory access types
  */
  enum class EMemAccessType : unsigned char {
    Unknown = 0,
    Read = 1,
    Write = 2,
    ReadWrite = 3,
  };
  extern unsigned char EMemAccessTypeSize;
  extern const std::string EMemAccessType_to_string(EMemAccessType in_enum); //!< Get string name for enum.
  extern EMemAccessType string_to_EMemAccessType(const std::string& in_str); //!< Get enum value for string name.
  extern EMemAccessType try_string_to_EMemAccessType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EMemAccessTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Generator agent types
  */
  enum class EGenAgentType : unsigned char {
    GenInstructionAgent = 0,
    GenSequenceAgent = 1,
    GenVirtualMemoryAgent = 2,
    GenQueryAgent = 3,
    GenStateAgent = 4,
    GenExceptionAgent = 5,
    GenCallBackAgent = 6,
    GenStateTransitionAgent = 7,
  };
  extern unsigned char EGenAgentTypeSize;
  extern const std::string EGenAgentType_to_string(EGenAgentType in_enum); //!< Get string name for enum.
  extern EGenAgentType string_to_EGenAgentType(const std::string& in_str); //!< Get enum value for string name.
  extern EGenAgentType try_string_to_EGenAgentType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EGenAgentTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Choices types
  */
  enum class EChoicesType : unsigned char {
    OperandChoices = 0,
    RegisterFieldValueChoices = 1,
    PagingChoices = 2,
    GeneralChoices = 3,
    DependenceChoices = 4,
  };
  extern unsigned char EChoicesTypeSize;
  extern const std::string EChoicesType_to_string(EChoicesType in_enum); //!< Get string name for enum.
  extern EChoicesType string_to_EChoicesType(const std::string& in_str); //!< Get enum value for string name.
  extern EChoicesType try_string_to_EChoicesType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EChoicesTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Register types in the register files
  */
  enum class ERegisterType : unsigned char {
    GPR = 0,
    FPR = 1,
    SIMDR = 2,
    SIMDVR = 3,
    VECREG = 4,
    PREDREG = 5,
    SysReg = 6,
    SP = 7,
    ZR = 8,
    PC = 9,
    Internal = 10,
  };
  extern unsigned char ERegisterTypeSize;
  extern const std::string ERegisterType_to_string(ERegisterType in_enum); //!< Get string name for enum.
  extern ERegisterType string_to_ERegisterType(const std::string& in_str); //!< Get enum value for string name.
  extern ERegisterType try_string_to_ERegisterType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char ERegisterTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Constraint types
  */
  enum class EConstraintType : unsigned char {
    Value = 0,
    Range = 1,
  };
  extern unsigned char EConstraintTypeSize;
  extern const std::string EConstraintType_to_string(EConstraintType in_enum); //!< Get string name for enum.
  extern EConstraintType string_to_EConstraintType(const std::string& in_str); //!< Get enum value for string name.
  extern EConstraintType try_string_to_EConstraintType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EConstraintTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Constraint operation result types
  */
  enum class EConstraintResultType : unsigned char {
    Consumed = 0,
    Replace = 1,
    Remove = 2,
  };
  extern unsigned char EConstraintResultTypeSize;
  extern const std::string EConstraintResultType_to_string(EConstraintResultType in_enum); //!< Get string name for enum.
  extern EConstraintResultType string_to_EConstraintResultType(const std::string& in_str); //!< Get enum value for string name.
  extern EConstraintResultType try_string_to_EConstraintResultType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EConstraintResultTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    In ConstraintSet assembling, the direction toward which to move involved Constraints.
  */
  enum class EConstraintMoveDirection : unsigned char {
    Shrink = 0,
    Expand = 1,
  };
  extern unsigned char EConstraintMoveDirectionSize;
  extern const std::string EConstraintMoveDirection_to_string(EConstraintMoveDirection in_enum); //!< Get string name for enum.
  extern EConstraintMoveDirection string_to_EConstraintMoveDirection(const std::string& in_str); //!< Get enum value for string name.
  extern EConstraintMoveDirection try_string_to_EConstraintMoveDirection(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EConstraintMoveDirectionBaseType; //!< Define a type name for the enum base data type.


  /*!
    Address translation result type
  */
  enum class ETranslationResultType : unsigned char {
    NotMapped = 0,
    Mapped = 1,
    AddressError = 2,
  };
  extern unsigned char ETranslationResultTypeSize;
  extern const std::string ETranslationResultType_to_string(ETranslationResultType in_enum); //!< Get string name for enum.
  extern ETranslationResultType string_to_ETranslationResultType(const std::string& in_str); //!< Get enum value for string name.
  extern ETranslationResultType try_string_to_ETranslationResultType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char ETranslationResultTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Vm State types
  */
  enum class EVmStateType : unsigned char {
    Uninitialized = 0,
    Invalid = 1,
    Initialized = 2,
    Active = 3,
  };
  extern unsigned char EVmStateTypeSize;
  extern const std::string EVmStateType_to_string(EVmStateType in_enum); //!< Get string name for enum.
  extern EVmStateType string_to_EVmStateType(const std::string& in_str); //!< Get enum value for string name.
  extern EVmStateType try_string_to_EVmStateType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EVmStateTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Vm State Bit Masks
  */
  enum class EVmStateBits : unsigned char {
    ActiveMask = 1,
    InitMask = 2,
  };
  extern unsigned char EVmStateBitsSize;
  extern const std::string EVmStateBits_to_string(EVmStateBits in_enum); //!< Get string name for enum.
  extern EVmStateBits string_to_EVmStateBits(const std::string& in_str); //!< Get enum value for string name.
  extern EVmStateBits try_string_to_EVmStateBits(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EVmStateBitsBaseType; //!< Define a type name for the enum base data type.


  /*!
    Addressing mode state types
  */
  enum class EAddrModeStateType : unsigned char {
    Free = 1,
    Mapped = 2,
  };
  extern unsigned char EAddrModeStateTypeSize;
  extern const std::string EAddrModeStateType_to_string(EAddrModeStateType in_enum); //!< Get string name for enum.
  extern EAddrModeStateType string_to_EAddrModeStateType(const std::string& in_str); //!< Get enum value for string name.
  extern EAddrModeStateType try_string_to_EAddrModeStateType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EAddrModeStateTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Sequence types
  */
  enum class ESequenceType : unsigned char {
    BootLoading = 0,
    EndOfTest = 1,
    Summary = 2,
    LoadRegister = 3,
    CommitInstruction = 4,
    JumpToStart = 5,
    BranchToTarget = 6,
    InitialSetup = 7,
    RegisterReservation = 8,
    EscapeCollision = 9,
    BranchNotTaken = 10,
    BntNode = 11,
    ReExecution = 12,
    UpdatePeState = 13,
    UpdateRegisterField = 14,
    SetRegister = 15,
    ConfirmSpace = 16,
    ReloadRegister = 17,
    BatchReloadRegisters = 18,
    SpeculativeBntNode = 19,
    ThreadSummary = 20,
    InitializeAddrTables = 21,
    LoadLargeRegister = 22,
    BeginRestoreLoop = 23,
    EndRestoreLoop = 24,
    RestoreLoopState = 25,
    LoopReconverge = 26,
  };
  extern unsigned char ESequenceTypeSize;
  extern const std::string ESequenceType_to_string(ESequenceType in_enum); //!< Get string name for enum.
  extern ESequenceType string_to_ESequenceType(const std::string& in_str); //!< Get enum value for string name.
  extern ESequenceType try_string_to_ESequenceType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char ESequenceTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    CallBack types
  */
  enum class ECallBackType : unsigned char {
    Bnt = 0,
    Eret = 1,
  };
  extern unsigned char ECallBackTypeSize;
  extern const std::string ECallBackType_to_string(ECallBackType in_enum); //!< Get string name for enum.
  extern ECallBackType string_to_ECallBackType(const std::string& in_str); //!< Get enum value for string name.
  extern ECallBackType try_string_to_ECallBackType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char ECallBackTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Extend types
  */
  enum class EExtendType : unsigned char {
    UXTW = 0,
    LSL = 1,
    SXTW = 2,
    SXTX = 3,
    UXTX = 4,
  };
  extern unsigned char EExtendTypeSize;
  extern const std::string EExtendType_to_string(EExtendType in_enum); //!< Get string name for enum.
  extern EExtendType string_to_EExtendType(const std::string& in_str); //!< Get enum value for string name.
  extern EExtendType try_string_to_EExtendType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EExtendTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Virtual memory request types
  */
  enum class EVmRequestType : unsigned char {
    GenPA = 0,
    GenVA = 1,
    GenVAforPA = 2,
    GenPage = 3,
    GenFreePage = 4,
    PhysicalRegion = 5,
    GenVMVA = 6,
    GenVmContext = 7,
    UpdateVm = 8,
  };
  extern unsigned char EVmRequestTypeSize;
  extern const std::string EVmRequestType_to_string(EVmRequestType in_enum); //!< Get string name for enum.
  extern EVmRequestType string_to_EVmRequestType(const std::string& in_str); //!< Get enum value for string name.
  extern EVmRequestType try_string_to_EVmRequestType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EVmRequestTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Instruction boolean attribute types
  */
  enum class EInstrBoolAttrType : unsigned char {
    NoSkip = 0,
    NoRestriction = 1,
    UnalignedPC = 2,
    AlignedData = 3,
    AlignedSP = 4,
    NoBnt = 5,
    NoPreamble = 6,
    SpeculativeBnt = 7,
    NoDataAbort = 8,
    SharedTarget = 9,
  };
  extern unsigned char EInstrBoolAttrTypeSize;
  extern const std::string EInstrBoolAttrType_to_string(EInstrBoolAttrType in_enum); //!< Get string name for enum.
  extern EInstrBoolAttrType string_to_EInstrBoolAttrType(const std::string& in_str); //!< Get enum value for string name.
  extern EInstrBoolAttrType try_string_to_EInstrBoolAttrType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EInstrBoolAttrTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Instruction constraint attribute types
  */
  enum class EInstrConstraintAttrType : unsigned char {
    LSTarget = 0,
    BRTarget = 1,
    CondTaken = 2,
  };
  extern unsigned char EInstrConstraintAttrTypeSize;
  extern const std::string EInstrConstraintAttrType_to_string(EInstrConstraintAttrType in_enum); //!< Get string name for enum.
  extern EInstrConstraintAttrType string_to_EInstrConstraintAttrType(const std::string& in_str); //!< Get enum value for string name.
  extern EInstrConstraintAttrType try_string_to_EInstrConstraintAttrType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EInstrConstraintAttrTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    BNT attribute types
  */
  enum class EBntAttributeType : unsigned char {
    Taken = 0,
    Conditional = 1,
    Accurate = 2,
  };
  extern unsigned char EBntAttributeTypeSize;
  extern const std::string EBntAttributeType_to_string(EBntAttributeType in_enum); //!< Get string name for enum.
  extern EBntAttributeType string_to_EBntAttributeType(const std::string& in_str); //!< Get enum value for string name.
  extern EBntAttributeType try_string_to_EBntAttributeType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EBntAttributeTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    ALU operation type
  */
  enum class EAluOperationType : unsigned char {
    Unknown = 0,
    ADD = 1,
    SUB = 2,
  };
  extern unsigned char EAluOperationTypeSize;
  extern const std::string EAluOperationType_to_string(EAluOperationType in_enum); //!< Get string name for enum.
  extern EAluOperationType string_to_EAluOperationType(const std::string& in_str); //!< Get enum value for string name.
  extern EAluOperationType try_string_to_EAluOperationType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EAluOperationTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Data processing operation type
  */
  enum class EDataProcessingOperationType : unsigned char {
    Unknown = 0,
    MulAdd = 1,
    Mul = 2,
    UDiv = 3,
    SDiv = 4,
    AddWithCarry = 5,
    SubWithCarry = 6,
    AndShift32 = 7,
    AndShift64 = 8,
    BicClearShift32 = 9,
    BicClearShift64 = 10,
    EonExcOrNotShift32 = 11,
    EonExcOrNotShift64 = 12,
    EorExcOrShift32 = 13,
    EorExcOrShift64 = 14,
    OrrIncOrShift32 = 15,
    OrrIncOrShift64 = 16,
    MvnNotShift32 = 17,
    MvnNotShift64 = 18,
    OrnIncOrNotShift32 = 19,
    OrnIncOrNotShift64 = 20,
    MsubMulSub32 = 21,
    MsubMulSub64 = 22,
    MnegMulNot32 = 23,
    MnegMulNot64 = 24,
    SmaddlSigMulAddLong = 25,
    SmsublSigMulSubLong = 26,
    SmneglSigMulNotLong = 27,
    SmullSigMulLong = 28,
    SmulhSigMulHigh = 29,
    UmaddlMulAddLong = 30,
    UmsublMulSubLong = 31,
    UmneglMulNotLong = 32,
    UmullMulLong = 33,
    UmulhMulHigh = 34,
    AndImm32 = 35,
    AndImm64 = 36,
    EorExcOrImm32 = 37,
    EorExcOrImm64 = 38,
    OrrIncOrImm32 = 39,
    OrrIncOrImm64 = 40,
    AddExt32 = 41,
    AddExt64 = 42,
    AddShift32 = 43,
    AddShift64 = 44,
    SubExt32 = 45,
    SubExt64 = 46,
    SubShift32 = 47,
    SubShift64 = 48,
    AddsAddSetFlagsExt32 = 49,
    AddsAddSetFlagsExt64 = 50,
    AddsAddSetFlagsShift32 = 51,
    AddsAddSetFlagsShift64 = 52,
    SubsSubSetFlagsExt32 = 53,
    SubsSubSetFlagsExt64 = 54,
    SubsSubSetFlagsShift32 = 55,
    SubsSubSetFlagsShift64 = 56,
    NegNegateShift32 = 57,
    NegNegateShift64 = 58,
    NegsNegateSetFlagsShift32 = 59,
    NegsNegateSetFlagsShift64 = 60,
    NgcNegateWithCarry32 = 61,
    NgcNegateWithCarry64 = 62,
    NgcsNegateWithCarrySetFlags32 = 63,
    NgcsNegateWithCarrySetFlags64 = 64,
    AndsAndSetFlagsShift32 = 65,
    AndsAndSetFlagsShift64 = 66,
    AndsAndSetFlagsImm32 = 67,
    AndsAndSetFlagsImm64 = 68,
    BicsClearSetFlagsShift32 = 69,
    BicsClearSetFlagsShift64 = 70,
  };
  extern unsigned char EDataProcessingOperationTypeSize;
  extern const std::string EDataProcessingOperationType_to_string(EDataProcessingOperationType in_enum); //!< Get string name for enum.
  extern EDataProcessingOperationType string_to_EDataProcessingOperationType(const std::string& in_str); //!< Get enum value for string name.
  extern EDataProcessingOperationType try_string_to_EDataProcessingOperationType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EDataProcessingOperationTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Page table entry types
  */
  enum class EPteType : unsigned char {
    P4K = 0,
    P16K = 1,
    P64K = 2,
    P2M = 3,
    P4M = 4,
    P32M = 5,
    P512M = 6,
    P1G = 7,
    P512G = 8,
  };
  extern unsigned char EPteTypeSize;
  extern const std::string EPteType_to_string(EPteType in_enum); //!< Get string name for enum.
  extern EPteType string_to_EPteType(const std::string& in_str); //!< Get enum value for string name.
  extern EPteType try_string_to_EPteType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EPteTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Page table entry category types
  */
  enum class EPteCategoryType : unsigned char {
    Page = 0,
    Table = 1,
  };
  extern unsigned char EPteCategoryTypeSize;
  extern const std::string EPteCategoryType_to_string(EPteCategoryType in_enum); //!< Get string name for enum.
  extern EPteCategoryType string_to_EPteCategoryType(const std::string& in_str); //!< Get enum value for string name.
  extern EPteCategoryType try_string_to_EPteCategoryType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EPteCategoryTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Notification types
  */
  enum class ENotificationType : unsigned char {
    RegisterUpdate = 0,
    RegisterInitiation = 1,
    ChoiceUpdate = 2,
    VariableUpdate = 3,
    ConditionUpdate = 4,
    PhysicalRegionAdded = 5,
    PCUpdate = 6,
  };
  extern unsigned char ENotificationTypeSize;
  extern const std::string ENotificationType_to_string(ENotificationType in_enum); //!< Get string name for enum.
  extern ENotificationType string_to_ENotificationType(const std::string& in_str); //!< Get enum value for string name.
  extern ENotificationType try_string_to_ENotificationType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char ENotificationTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    GenPageRequest attributes for configuring page generation
  */
  enum class EPageRequestAttributeType : unsigned char {
    VA = 0,
    IPA = 1,
    PA = 2,
    PageSize = 3,
    MemAttrArch = 4,
    MemAttrImpl = 5,
    AliasPageId = 6,
  };
  extern unsigned char EPageRequestAttributeTypeSize;
  extern const std::string EPageRequestAttributeType_to_string(EPageRequestAttributeType in_enum); //!< Get string name for enum.
  extern EPageRequestAttributeType string_to_EPageRequestAttributeType(const std::string& in_str); //!< Get enum value for string name.
  extern EPageRequestAttributeType try_string_to_EPageRequestAttributeType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EPageRequestAttributeTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Paging attribute of generated page that is useful in later test generation.
  */
  enum class EPageGenAttributeType : unsigned char {
    MemAttrImpl = 0,
    Invalid = 1,
    AddrSizeFault = 2,
    DataAccessPermission = 3,
    InstrAccessPermission = 4,
    Accessed = 5,
    Dirty = 6,
  };
  extern unsigned char EPageGenAttributeTypeSize;
  extern const std::string EPageGenAttributeType_to_string(EPageGenAttributeType in_enum); //!< Get string name for enum.
  extern EPageGenAttributeType string_to_EPageGenAttributeType(const std::string& in_str); //!< Get enum value for string name.
  extern EPageGenAttributeType try_string_to_EPageGenAttributeType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EPageGenAttributeTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Data access permission types.
  */
  enum class EDataAccessPermissionType : unsigned char {
    NoAccess = 0,
    ReadWrite = 1,
    ReadOnly = 2,
    ReadWriteNoUser = 3,
    ReadOnlyNoUser = 4,
    ReadWriteUserOnly = 5,
    ReadOnlyUserOnly = 6,
  };
  extern unsigned char EDataAccessPermissionTypeSize;
  extern const std::string EDataAccessPermissionType_to_string(EDataAccessPermissionType in_enum); //!< Get string name for enum.
  extern EDataAccessPermissionType string_to_EDataAccessPermissionType(const std::string& in_str); //!< Get enum value for string name.
  extern EDataAccessPermissionType try_string_to_EDataAccessPermissionType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EDataAccessPermissionTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Instruction access permission types.
  */
  enum class EInstrAccessPermissionType : unsigned char {
    Execute = 0,
    NoExecute = 1,
    PrivilegedNoExecute = 2,
  };
  extern unsigned char EInstrAccessPermissionTypeSize;
  extern const std::string EInstrAccessPermissionType_to_string(EInstrAccessPermissionType in_enum); //!< Get string name for enum.
  extern EInstrAccessPermissionType string_to_EInstrAccessPermissionType(const std::string& in_str); //!< Get enum value for string name.
  extern EInstrAccessPermissionType try_string_to_EInstrAccessPermissionType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EInstrAccessPermissionTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Global state types
  */
  enum class EGlobalStateType : unsigned char {
    ResetPC = 0,
    PageTableRegionSize = 1,
    PageTableRegionAlign = 2,
    PageTableRegionStart = 3,
    MemoryFillPattern = 4,
    ElfMachine = 5,
    AppRegisterWidth = 6,
  };
  extern unsigned char EGlobalStateTypeSize;
  extern const std::string EGlobalStateType_to_string(EGlobalStateType in_enum); //!< Get string name for enum.
  extern EGlobalStateType string_to_EGlobalStateType(const std::string& in_str); //!< Get enum value for string name.
  extern EGlobalStateType try_string_to_EGlobalStateType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EGlobalStateTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Address types
  */
  enum class EAddrType : unsigned char {
    DataAddr = 1,
    InstructionAddr = 2,
  };
  extern unsigned char EAddrTypeSize;
  extern const std::string EAddrType_to_string(EAddrType in_enum); //!< Get string name for enum.
  extern EAddrType string_to_EAddrType(const std::string& in_str); //!< Get enum value for string name.
  extern EAddrType try_string_to_EAddrType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EAddrTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Boot loading element action types
  */
  enum class EBootElementActionType : unsigned char {
    LoadRegister = 0,
    InstructionBarrier = 1,
    DataBarrier = 2,
    LoadLargeRegister = 3,
  };
  extern unsigned char EBootElementActionTypeSize;
  extern const std::string EBootElementActionType_to_string(EBootElementActionType in_enum); //!< Get string name for enum.
  extern EBootElementActionType string_to_EBootElementActionType(const std::string& in_str); //!< Get enum value for string name.
  extern EBootElementActionType try_string_to_EBootElementActionType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EBootElementActionTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Query types
  */
  enum class EQueryType : unsigned char {
    RegisterIndex = 0,
    RegisterReloadValue = 1,
    InstructionRecord = 2,
    RegisterInfo = 3,
    GenState = 4,
    PageInfo = 5,
    BranchOffset = 6,
    RegisterFieldInfo = 7,
    ChoicesTreeInfo = 8,
    SimpleExceptionsHistory = 9,
    AdvancedExceptionsHistory = 10,
    MaxAddress = 11,
    ValidAddressMask = 12,
    HandlerSetMemory = 13,
    ExceptionVectorBaseAddress = 14,
    ResourceEntropy = 15,
    SoftwareStepPrivLevs = 16,
    SoftwareStepReady = 17,
    PickedValue = 18,
    GetVmContextDelta = 19,
    RestoreLoopContext = 20,
    GenData = 21,
    GetVmCurrentContext = 22,
  };
  extern unsigned char EQueryTypeSize;
  extern const std::string EQueryType_to_string(EQueryType in_enum); //!< Get string name for enum.
  extern EQueryType string_to_EQueryType(const std::string& in_str); //!< Get enum value for string name.
  extern EQueryType try_string_to_EQueryType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EQueryTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Generator mode types
  */
  enum class EGenModeType : unsigned int {
    NoIss = 1,
    SimOff = 2,
    NoEscape = 4,
    NoJump = 8,
    ReExe = 16,
    Exception = 32,
    NoSkip = 64,
    InLoop = 128,
    DelayInit = 256,
    LowPower = 512,
    Filler = 1024,
    Speculative = 2048,
    AddressShortage = 4096,
    RecordingState = 8192,
    RestoreStateLoop = 16384,
  };
  extern unsigned int EGenModeTypeSize;
  extern const std::string EGenModeType_to_string(EGenModeType in_enum); //!< Get string name for enum.
  extern EGenModeType string_to_EGenModeType(const std::string& in_str); //!< Get enum value for string name.
  extern EGenModeType try_string_to_EGenModeType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned int EGenModeTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Generator state types
  */
  enum class EGenStateType : unsigned char {
    GenMode = 0,
    PC = 1,
    InitialPC = 2,
    BootPC = 3,
    EL = 4,
    Loop = 5,
    CPSR = 6,
    LinearBlock = 7,
    LastPC = 8,
    BntHook = 9,
    PostLoopAddress = 10,
    LoopReconvergeAddress = 11,
    PrivilegeLevel = 12,
    Endianness = 13,
  };
  extern unsigned char EGenStateTypeSize;
  extern const std::string EGenStateType_to_string(EGenStateType in_enum); //!< Get string name for enum.
  extern EGenStateType string_to_EGenStateType(const std::string& in_str); //!< Get enum value for string name.
  extern EGenStateType try_string_to_EGenStateType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EGenStateTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Action types for generator states
  */
  enum class EGenStateActionType : unsigned char {
    Push = 0,
    Pop = 1,
    Set = 2,
    Enable = 3,
    Disable = 4,
  };
  extern unsigned char EGenStateActionTypeSize;
  extern const std::string EGenStateActionType_to_string(EGenStateActionType in_enum); //!< Get string name for enum.
  extern EGenStateActionType string_to_EGenStateActionType(const std::string& in_str); //!< Get enum value for string name.
  extern EGenStateActionType try_string_to_EGenStateActionType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EGenStateActionTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Generator exception detail types
  */
  enum class EGenExceptionDetatilType : unsigned char {
    RegisterNotInitSetValue = 0,
  };
  extern unsigned char EGenExceptionDetatilTypeSize;
  extern const std::string EGenExceptionDetatilType_to_string(EGenExceptionDetatilType in_enum); //!< Get string name for enum.
  extern EGenExceptionDetatilType string_to_EGenExceptionDetatilType(const std::string& in_str); //!< Get enum value for string name.
  extern EGenExceptionDetatilType try_string_to_EGenExceptionDetatilType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EGenExceptionDetatilTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Types of exception related request.
  */
  enum class EExceptionRequestType : unsigned char {
    HandleException = 0,
    SystemCall = 1,
    UpdateHandlerInfo = 2,
  };
  extern unsigned char EExceptionRequestTypeSize;
  extern const std::string EExceptionRequestType_to_string(EExceptionRequestType in_enum); //!< Get string name for enum.
  extern EExceptionRequestType string_to_EExceptionRequestType(const std::string& in_str); //!< Get enum value for string name.
  extern EExceptionRequestType try_string_to_EExceptionRequestType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EExceptionRequestTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Types of exception events.
  */
  enum class EExceptionEventType : unsigned char {
    ExceptionReturn = 0,
  };
  extern unsigned char EExceptionEventTypeSize;
  extern const std::string EExceptionEventType_to_string(EExceptionEventType in_enum); //!< Get string name for enum.
  extern EExceptionEventType string_to_EExceptionEventType(const std::string& in_str); //!< Get enum value for string name.
  extern EExceptionEventType try_string_to_EExceptionEventType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EExceptionEventTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Types of exception constraint.
  */
  enum class EExceptionConstraintType : unsigned char {
    Allow = 0,
    Prevent = 1,
    Trigger = 2,
    PreventHard = 3,
    TriggerHard = 4,
    Invalid = 5,
  };
  extern unsigned char EExceptionConstraintTypeSize;
  extern const std::string EExceptionConstraintType_to_string(EExceptionConstraintType in_enum); //!< Get string name for enum.
  extern EExceptionConstraintType string_to_EExceptionConstraintType(const std::string& in_str); //!< Get enum value for string name.
  extern EExceptionConstraintType try_string_to_EExceptionConstraintType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EExceptionConstraintTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Types of physical memory regions.
  */
  enum class EPhysicalRegionType : unsigned char {
    HandlerMemory = 0,
    ExceptionStack = 1,
    PageTable = 2,
    BootRegion = 3,
    AddressTable = 4,
    ResetRegion = 5,
  };
  extern unsigned char EPhysicalRegionTypeSize;
  extern const std::string EPhysicalRegionType_to_string(EPhysicalRegionType in_enum); //!< Get string name for enum.
  extern EPhysicalRegionType string_to_EPhysicalRegionType(const std::string& in_str); //!< Get enum value for string name.
  extern EPhysicalRegionType try_string_to_EPhysicalRegionType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EPhysicalRegionTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Data Type to override operand data
  */
  enum class EDataType : unsigned char {
    INT8 = 16,
    INT16 = 17,
    INT32 = 18,
    INT64 = 19,
    FIX8 = 32,
    FIX16 = 33,
    FIX32 = 34,
    FIX64 = 35,
    FP8 = 64,
    FP16 = 65,
    FP32 = 66,
    FP64 = 67,
  };
  extern unsigned char EDataTypeSize;
  extern const std::string EDataType_to_string(EDataType in_enum); //!< Get string name for enum.
  extern EDataType string_to_EDataType(const std::string& in_str); //!< Get enum value for string name.
  extern EDataType try_string_to_EDataType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EDataTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Types of dump options.
  */
  enum class EDumpType : unsigned char {
    Asm = 0,
    Elf = 1,
    Mem = 2,
    Page = 3,
    FailOnly = 4,
    Handlers = 5,
  };
  extern unsigned char EDumpTypeSize;
  extern const std::string EDumpType_to_string(EDumpType in_enum); //!< Get string name for enum.
  extern EDumpType string_to_EDumpType(const std::string& in_str); //!< Get enum value for string name.
  extern EDumpType try_string_to_EDumpType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EDumpTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Types of resource for dependency.
  */
  enum class EResourceType : unsigned char {
    GPR = 0,
    FPR = 1,
    PREDREG = 2,
  };
  extern unsigned char EResourceTypeSize;
  extern const std::string EResourceType_to_string(EResourceType in_enum); //!< Get string name for enum.
  extern EResourceType string_to_EResourceType(const std::string& in_str); //!< Get enum value for string name.
  extern EResourceType try_string_to_EResourceType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EResourceTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Types of resource dependency.
  */
  enum class EDependencyType : unsigned char {
    OnSource = 0,
    OnTarget = 1,
    NoDependency = 2,
  };
  extern unsigned char EDependencyTypeSize;
  extern const std::string EDependencyType_to_string(EDependencyType in_enum); //!< Get string name for enum.
  extern EDependencyType string_to_EDependencyType(const std::string& in_str); //!< Get enum value for string name.
  extern EDependencyType try_string_to_EDependencyType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EDependencyTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Types of resource access age.
  */
  enum class EAccessAgeType : unsigned char {
    Invalid = 0,
    Read = 1,
    Write = 2,
  };
  extern unsigned char EAccessAgeTypeSize;
  extern const std::string EAccessAgeType_to_string(EAccessAgeType in_enum); //!< Get string name for enum.
  extern EAccessAgeType string_to_EAccessAgeType(const std::string& in_str); //!< Get enum value for string name.
  extern EAccessAgeType try_string_to_EAccessAgeType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EAccessAgeTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Types of entropy state.
  */
  enum class EEntropyStateType : unsigned char {
    WarmUp = 0,
    Stable = 1,
    CoolDown = 2,
  };
  extern unsigned char EEntropyStateTypeSize;
  extern const std::string EEntropyStateType_to_string(EEntropyStateType in_enum); //!< Get string name for enum.
  extern EEntropyStateType string_to_EEntropyStateType(const std::string& in_str); //!< Get enum value for string name.
  extern EEntropyStateType try_string_to_EEntropyStateType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EEntropyStateTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Types of variables.
  */
  enum class EVariableType : unsigned char {
    Choice = 0,
    Value = 1,
    String = 2,
  };
  extern unsigned char EVariableTypeSize;
  extern const std::string EVariableType_to_string(EVariableType in_enum); //!< Get string name for enum.
  extern EVariableType string_to_EVariableType(const std::string& in_str); //!< Get enum value for string name.
  extern EVariableType try_string_to_EVariableType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EVariableTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Type of AddressSolutionFilters.
  */
  enum class EAddressSolutionFilterType : unsigned char {
    BaseDependency = 0,
    IndexDependency = 1,
    SpAlignment = 2,
  };
  extern unsigned char EAddressSolutionFilterTypeSize;
  extern const std::string EAddressSolutionFilterType_to_string(EAddressSolutionFilterType in_enum); //!< Get string name for enum.
  extern EAddressSolutionFilterType string_to_EAddressSolutionFilterType(const std::string& in_str); //!< Get enum value for string name.
  extern EAddressSolutionFilterType try_string_to_EAddressSolutionFilterType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EAddressSolutionFilterTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Types of functions calling back template.
  */
  enum class ECallBackTemplateType : unsigned char {
    SetBntSeq = 0,
    RunBntSeq = 1,
    SetEretPreambleSeq = 2,
    RunEretPreambleSeq = 3,
  };
  extern unsigned char ECallBackTemplateTypeSize;
  extern const std::string ECallBackTemplateType_to_string(ECallBackTemplateType in_enum); //!< Get string name for enum.
  extern ECallBackTemplateType string_to_ECallBackTemplateType(const std::string& in_str); //!< Get enum value for string name.
  extern ECallBackTemplateType try_string_to_ECallBackTemplateType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char ECallBackTemplateTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Register types to reserve register
  */
  enum class ERegReserveType : unsigned char {
    User = 0,
    Exception = 1,
    Unpredictable = 2,
  };
  extern unsigned char ERegReserveTypeSize;
  extern const std::string ERegReserveType_to_string(ERegReserveType in_enum); //!< Get string name for enum.
  extern ERegReserveType string_to_ERegReserveType(const std::string& in_str); //!< Get enum value for string name.
  extern ERegReserveType try_string_to_ERegReserveType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char ERegReserveTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Types of data alignment
  */
  enum class EDataAlignedType : unsigned char {
    SingleDataAligned = 0,
    Unaligned = 1,
    WholeDataAligned = 2,
  };
  extern unsigned char EDataAlignedTypeSize;
  extern const std::string EDataAlignedType_to_string(EDataAlignedType in_enum); //!< Get string name for enum.
  extern EDataAlignedType string_to_EDataAlignedType(const std::string& in_str); //!< Get enum value for string name.
  extern EDataAlignedType try_string_to_EDataAlignedType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EDataAlignedTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Types of Speculative Bnt Action
  */
  enum class ESpeculativeBntActionType : unsigned char {
    Execute = 0,
    Restore = 1,
    Pop = 2,
  };
  extern unsigned char ESpeculativeBntActionTypeSize;
  extern const std::string ESpeculativeBntActionType_to_string(ESpeculativeBntActionType in_enum); //!< Get string name for enum.
  extern ESpeculativeBntActionType string_to_ESpeculativeBntActionType(const std::string& in_str); //!< Get enum value for string name.
  extern ESpeculativeBntActionType try_string_to_ESpeculativeBntActionType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char ESpeculativeBntActionTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Types of Resource Pe State
  */
  enum class EResourcePeStateType : unsigned char {
    RegisterPeState = 0,
    MemoryPeState = 1,
    DependencePeState = 2,
    ExceptionPeState = 3,
  };
  extern unsigned char EResourcePeStateTypeSize;
  extern const std::string EResourcePeStateType_to_string(EResourcePeStateType in_enum); //!< Get string name for enum.
  extern EResourcePeStateType string_to_EResourcePeStateType(const std::string& in_str); //!< Get enum value for string name.
  extern EResourcePeStateType try_string_to_EResourcePeStateType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EResourcePeStateTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Types of reloading method
  */
  enum class EReloadingMethodType : unsigned char {
    Move = 0,
    Load = 1,
  };
  extern unsigned char EReloadingMethodTypeSize;
  extern const std::string EReloadingMethodType_to_string(EReloadingMethodType in_enum); //!< Get string name for enum.
  extern EReloadingMethodType string_to_EReloadingMethodType(const std::string& in_str); //!< Get enum value for string name.
  extern EReloadingMethodType try_string_to_EReloadingMethodType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EReloadingMethodTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Types of sp alignment
  */
  enum class ESpAlignedType : unsigned char {
    Aligned = 0,
    Unaligned = 1,
  };
  extern unsigned char ESpAlignedTypeSize;
  extern const std::string ESpAlignedType_to_string(ESpAlignedType in_enum); //!< Get string name for enum.
  extern ESpAlignedType string_to_ESpAlignedType(const std::string& in_str); //!< Get enum value for string name.
  extern ESpAlignedType try_string_to_ESpAlignedType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char ESpAlignedTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Categories of PE state to restore
  */
  enum class ERestoreExclusionGroup : unsigned char {
    GPR = 0,
    SIMDFP = 1,
    VECREG = 2,
    System = 3,
    Memory = 4,
  };
  extern unsigned char ERestoreExclusionGroupSize;
  extern const std::string ERestoreExclusionGroup_to_string(ERestoreExclusionGroup in_enum); //!< Get string name for enum.
  extern ERestoreExclusionGroup string_to_ERestoreExclusionGroup(const std::string& in_str); //!< Get enum value for string name.
  extern ERestoreExclusionGroup try_string_to_ERestoreExclusionGroup(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char ERestoreExclusionGroupBaseType; //!< Define a type name for the enum base data type.


  /*!
    Scheduling state types
  */
  enum class ESchedulingState : unsigned char {
    Random = 0,
    Finishing = 1,
    Locked = 2,
  };
  extern unsigned char ESchedulingStateSize;
  extern const std::string ESchedulingState_to_string(ESchedulingState in_enum); //!< Get string name for enum.
  extern ESchedulingState string_to_ESchedulingState(const std::string& in_str); //!< Get enum value for string name.
  extern ESchedulingState try_string_to_ESchedulingState(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char ESchedulingStateBaseType; //!< Define a type name for the enum base data type.


  /*!
    Categories of PE state to restore
  */
  enum class ERestoreGroup : unsigned char {
    GPR = 0,
    VECREG = 1,
    PREDREG = 2,
    System = 3,
    Memory = 4,
  };
  extern unsigned char ERestoreGroupSize;
  extern const std::string ERestoreGroup_to_string(ERestoreGroup in_enum); //!< Get string name for enum.
  extern ERestoreGroup string_to_ERestoreGroup(const std::string& in_str); //!< Get enum value for string name.
  extern ERestoreGroup try_string_to_ERestoreGroup(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char ERestoreGroupBaseType; //!< Define a type name for the enum base data type.


  /*!
    Partition thread group policy
  */
  enum class EPartitionThreadPolicy : unsigned char {
    Random = 0,
    SameCore = 1,
    SameChip = 2,
    DiffChip = 3,
    DiffCore = 4,
  };
  extern unsigned char EPartitionThreadPolicySize;
  extern const std::string EPartitionThreadPolicy_to_string(EPartitionThreadPolicy in_enum); //!< Get string name for enum.
  extern EPartitionThreadPolicy string_to_EPartitionThreadPolicy(const std::string& in_str); //!< Get enum value for string name.
  extern EPartitionThreadPolicy try_string_to_EPartitionThreadPolicy(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EPartitionThreadPolicyBaseType; //!< Define a type name for the enum base data type.


  /*!
    State of a LargeConstraintSet object
  */
  enum class ELargeConstraintSetState : unsigned char {
    Clean = 0,
    AddCached = 1,
    SubCached = 2,
  };
  extern unsigned char ELargeConstraintSetStateSize;
  extern const std::string ELargeConstraintSetState_to_string(ELargeConstraintSetState in_enum); //!< Get string name for enum.
  extern ELargeConstraintSetState string_to_ELargeConstraintSetState(const std::string& in_str); //!< Get enum value for string name.
  extern ELargeConstraintSetState try_string_to_ELargeConstraintSetState(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char ELargeConstraintSetStateBaseType; //!< Define a type name for the enum base data type.


  /*!
    Types of address reuse
  */
  enum class EAddressReuseType : unsigned char {
    ReadAfterRead = 1,
    ReadAfterWrite = 2,
    WriteAfterRead = 4,
    WriteAfterWrite = 8,
  };
  extern unsigned char EAddressReuseTypeSize;
  extern const std::string EAddressReuseType_to_string(EAddressReuseType in_enum); //!< Get string name for enum.
  extern EAddressReuseType string_to_EAddressReuseType(const std::string& in_str); //!< Get enum value for string name.
  extern EAddressReuseType try_string_to_EAddressReuseType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EAddressReuseTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Mode determining how to treat duplicate or repeated StateElements
  */
  enum class EStateElementDuplicateMode : unsigned char {
    Fail = 0,
    Replace = 1,
    Ignore = 2,
  };
  extern unsigned char EStateElementDuplicateModeSize;
  extern const std::string EStateElementDuplicateMode_to_string(EStateElementDuplicateMode in_enum); //!< Get string name for enum.
  extern EStateElementDuplicateMode string_to_EStateElementDuplicateMode(const std::string& in_str); //!< Get enum value for string name.
  extern EStateElementDuplicateMode try_string_to_EStateElementDuplicateMode(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EStateElementDuplicateModeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Type of StateTransition
  */
  enum class EStateTransitionType : unsigned char {
    Boot = 0,
    Explicit = 1,
  };
  extern unsigned char EStateTransitionTypeSize;
  extern const std::string EStateTransitionType_to_string(EStateTransitionType in_enum); //!< Get string name for enum.
  extern EStateTransitionType string_to_EStateTransitionType(const std::string& in_str); //!< Get enum value for string name.
  extern EStateTransitionType try_string_to_EStateTransitionType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EStateTransitionTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Mode determining the order in which StateElements are processed
  */
  enum class EStateTransitionOrderMode : unsigned char {
    UseDefault = 0,
    AsSpecified = 1,
    ByStateElementType = 2,
    ByPriority = 3,
  };
  extern unsigned char EStateTransitionOrderModeSize;
  extern const std::string EStateTransitionOrderMode_to_string(EStateTransitionOrderMode in_enum); //!< Get string name for enum.
  extern EStateTransitionOrderMode string_to_EStateTransitionOrderMode(const std::string& in_str); //!< Get enum value for string name.
  extern EStateTransitionOrderMode try_string_to_EStateTransitionOrderMode(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EStateTransitionOrderModeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Types of StateElements for capturing system State
  */
  enum class EStateElementType : unsigned char {
    Memory = 0,
    SystemRegister = 1,
    VectorRegister = 2,
    GPR = 3,
    VmContext = 4,
    PrivilegeLevel = 5,
    PC = 6,
    FloatingPointRegister = 7,
    PredicateRegister = 8,
  };
  extern unsigned char EStateElementTypeSize;
  extern const std::string EStateElementType_to_string(EStateElementType in_enum); //!< Get string name for enum.
  extern EStateElementType string_to_EStateElementType(const std::string& in_str); //!< Get enum value for string name.
  extern EStateElementType try_string_to_EStateElementType(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EStateElementTypeBaseType; //!< Define a type name for the enum base data type.


  /*!
    Byte order
  */
  enum class EEndianness : unsigned char {
    LittleEndian = 0,
    BigEndian = 1,
  };
  extern unsigned char EEndiannessSize;
  extern const std::string EEndianness_to_string(EEndianness in_enum); //!< Get string name for enum.
  extern EEndianness string_to_EEndianness(const std::string& in_str); //!< Get enum value for string name.
  extern EEndianness try_string_to_EEndianness(const std::string& in_str, bool& okay); //!< Try to get enum value for string name, set status to indicate if conversion successful. Return value is indeterminate on failure.
  typedef unsigned char EEndiannessBaseType; //!< Define a type name for the enum base data type.

}

#endif
